home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 1
/
SPACE - Library 1 - Volume 1.iso
/
misc~1
/
5
/
osspascl
/
copy.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1985-11-19
|
3KB
|
99 lines
PROGRAM copy_pas ;
CONST
chunk_size = 4096 ;
fn_length = 64 ;
TYPE
buffer_type = PACKED ARRAY [ 1..chunk_size ] OF byte ;
file_name_type = PACKED ARRAY [ 1..fn_length ] OF char ;
VAR
fname : STRING ;
buf : buffer_type ;
i, in_file, out_file : integer ;
name : file_name_type ;
FUNCTION gem_create( VAR fname : file_name_type ; mode : integer ) : integer;
GEMDOS( $3C ) ;
FUNCTION gem_open( VAR fname : file_name_type ; mode : integer ) : integer;
GEMDOS( $3D ) ;
PROCEDURE gem_close( handle : integer ) ;
GEMDOS( $3E ) ;
FUNCTION gem_read( handle : integer ; nbytes : long_integer ;
VAR buf : buffer_type ) : long_integer ;
GEMDOS( $3F ) ;
FUNCTION gem_write( handle : integer ; nbytes : long_integer ;
VAR buf : buffer_type ) : long_integer ;
GEMDOS( $40 ) ;
PROCEDURE gem_seek( nbytes : long_integer ; handle, mode : integer ) ;
GEMDOS( $42 ) ;
PROCEDURE copy_file( in_file, out_file : integer ) ;
VAR
n : long_integer ;
BEGIN
REPEAT
gem_close( out_file ) ; { Close down the output! }
out_file := gem_open( name, 1 ) ;
gem_seek( 0, out_file, 2 ) ; { Seek end-of-file }
n := gem_read( in_file, chunk_size, buf ) ;
writeln( 'read chunk of ', n, ' bytes' ) ;
IF n < 0 THEN
BEGIN
writeln( 'error ', n, ' on input file' ) ;
halt ;
END
ELSE IF n > 0 THEN
IF gem_write( out_file, n, buf ) = n THEN
writeln( 'wrote chunk properly' )
ELSE
BEGIN
writeln( 'error writing output file' ) ;
halt ;
END ;
UNTIL n = 0 ;
END ;
BEGIN
write( 'Source file: ' ) ;
readln( fname ) ;
FOR i := 1 TO length( fname ) DO
name[i] := fname[i] ;
name[ length(fname) + 1 ] := chr(0) ;
in_file := gem_open( name, 0 ) ;
IF in_file >= 0 THEN
writeln( 'opened input file' )
ELSE
BEGIN
writeln( 'error ', in_file, ' opening input' ) ;
halt ;
END ;
write( 'Destination file: ' ) ;
readln( fname ) ;
FOR i := 1 TO length( fname ) DO
name[i] := fname[i] ;
name[ length(fname) + 1 ] := chr(0) ;
out_file := gem_create( name, 0 ) ;
IF out_file >= 0 THEN
writeln( 'opened output file' )
ELSE
BEGIN
writeln( 'error ', out_file, ' opening output' ) ;
halt ;
END ;
copy_file( in_file, out_file ) ;
gem_close( in_file ) ;
gem_close( out_file ) ;
END.
Press <CR> to continue: